package com.ruoyi.business.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.business.domain.EquipmentTypes;
import com.ruoyi.business.vo.EquipmentStatisticsVO;
import org.apache.ibatis.annotations.Param;
//import com.ruoyi.business.vo.EquipmentOverviewVo;

import java.util.List;

/**
 * 存储设备类型信息的，支持树状结构Mapper接口
 * 
 * @author ldkj
 * @date 2025-02-27
 */
public interface EquipmentTypesMapper extends BaseMapper<EquipmentTypes>
{
    /**
     * 查询存储设备类型信息的，支持树状结构
     * 
     * @param equipmentTypeId 存储设备类型信息的，支持树状结构主键
     * @return 存储设备类型信息的，支持树状结构
     */
    public EquipmentTypes selectEquipmentTypesByEquipmentTypeId(Long equipmentTypeId);

    /**
     * 查询存储设备类型信息的，支持树状结构列表
     * 
     * @param equipmentTypes 存储设备类型信息的，支持树状结构
     * @return 存储设备类型信息的，支持树状结构集合
     */
    public List<EquipmentTypes> selectEquipmentTypesList(EquipmentTypes equipmentTypes);

    /**
     * 新增存储设备类型信息的，支持树状结构
     * 
     * @param equipmentTypes 存储设备类型信息的，支持树状结构
     * @return 结果
     */
    public int insertEquipmentTypes(EquipmentTypes equipmentTypes);

    /**
     * 修改存储设备类型信息的，支持树状结构
     * 
     * @param equipmentTypes 存储设备类型信息的，支持树状结构
     * @return 结果
     */
    public int updateEquipmentTypes(EquipmentTypes equipmentTypes);

    /**
     * 删除存储设备类型信息的，支持树状结构
     * 
     * @param equipmentTypeId 存储设备类型信息的，支持树状结构主键
     * @return 结果
     */
    public int deleteEquipmentTypesByEquipmentTypeId(Long equipmentTypeId);

    /**
     * 批量删除存储设备类型信息的，支持树状结构
     * 
     * @param equipmentTypeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEquipmentTypesByEquipmentTypeIds(Long[] equipmentTypeIds);

    /**
     * 根据设备类型名称递归查询所有子类设备类型
     * 
     * @param equipmentTypeName 设备类型名称
     * @return 包含所有子类的设备类型列表
     */
    public List<EquipmentTypes> selectChildrenByEquipmentTypeName(@Param("equipmentTypeName") String equipmentTypeName);

    /**
     * 根据设备类型名称列表批量查询设备类型
     * 
     * @param equipmentTypeNames 设备类型名称列表
     * @return 设备类型列表
     */
    public List<EquipmentTypes> selectEquipmentTypesByNames(@Param("equipmentTypeNames") List<String> equipmentTypeNames);


    /**
     * 查询顶层父节点为1的第二层设备类型及其第三层总数和运行数
     * @return List of EquipmentStatisticsVO
     */
    List<EquipmentStatisticsVO> selectSecondLevelThirdStatistics();

}
